// 宠物家政服务平台 API 公共模块
// 配置axios默认设置

// 检查axios是否已加载
if (typeof axios === 'undefined') {
    console.error('Axios未加载，请确保在引入api.js之前引入axios');
}

// 创建axios实例
const api = axios.create({
    // 基础URL配置 - 根据实际后端服务地址修改
    baseURL: 'http://localhost:8080', // 开发环境
    // baseURL: 'https://your-production-domain.com/api', // 生产环境
    
    // 请求超时时间
    timeout: 10000,
    
    // 请求头配置
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        // 'Authorization': localStorage.getItem('token')
    }
});

// 请求拦截器
api.interceptors.request.use(
    (config) => {
        // 从localStorage获取token
        const token = localStorage.getItem('token');
        if (token) {
            config.headers.Authorization = `${token}`;
        }
        
        // 添加请求时间戳
        config.metadata = { startTime: new Date() };
        
        console.log('发送请求:', config.method?.toUpperCase(), config.url);
        return config;
    },
    (error) => {
        console.error('请求错误:', error);
        return Promise.reject(error);
    }
);

// 响应拦截器
api.interceptors.response.use(
    (response) => {
        // 计算请求耗时
        const endTime = new Date();
        const startTime = response.config.metadata?.startTime;
        const duration = startTime ? endTime - startTime : 0;
        
        console.log(`请求成功: ${response.config.method?.toUpperCase()} ${response.config.url} (${duration}ms)`);
        
        // 统一处理响应数据
        return response.data;
    },
    (error) => {
        // 计算请求耗时
        const endTime = new Date();
        const startTime = error.config?.metadata?.startTime;
        const duration = startTime ? endTime - startTime : 0;
        
        console.error(`请求失败: ${error.config?.method?.toUpperCase()} ${error.config?.url} (${duration}ms)`, error);
        
        // 统一错误处理
        if (error.response) {
            // 服务器返回错误状态码
            const { status, data } = error.response;
            
            switch (status) {
                case 401:
                    // 未授权，清除token并跳转到登录页
                    localStorage.removeItem('token');
                    localStorage.removeItem('userInfo');
                    window.location.href = '/login.html';
                    break;
                case 403:
                    // 禁止访问
                    showError('没有权限访问该资源');
                    break;
                case 404:
                    // 资源不存在
                    showError('请求的资源不存在');
                    break;
                case 500:
                    // 服务器内部错误
                    showError('服务器内部错误，请稍后重试');
                    break;
                default:
                    // 其他错误
                    showError(data?.message || `请求失败 (${status})`);
            }
        } else if (error.request) {
            // 网络错误
            showError('网络连接失败，请检查网络设置');
        } else {
            // 其他错误
            showError('请求配置错误');
        }
        
        return Promise.reject(error);
    }
);

// 错误提示函数
function showError(message) {
    // 可以根据项目需求使用不同的提示组件
    // 这里使用简单的alert，可以替换为toast或其他UI组件
    if (typeof alert !== 'undefined') {
        alert(message);
    } else {
        console.error('错误:', message);
    }
}

// API 接口定义
const petHouseAPI = {
    // 用户认证相关
    auth: {
        // 用户登录
        login: (data) => api.post('/user/login', data),
        // 短信登录
        smsLogin: (data) => api.post('/auth/sms-login', data),
        // 发送短信验证码
        sendSmsCode: (data) => api.post('/auth/send-sms', data),
        // 用户注册
        register: (data) => api.post('/auth/register', data),
        // 用户登出
        logout: () => api.post('/auth/logout'),
        // 刷新token
        refreshToken: () => api.post('/auth/refresh'),
        // 获取当前用户信息
        getCurrentUser: () => api.get('/auth/me'),
        // 微信登录
        wechatLogin: () => api.post('/auth/wechat-login'),
        // QQ登录
        qqLogin: () => api.post('/auth/qq-login'),
        // 忘记密码
        forgotPassword: (data) => api.post('/auth/forgot-password', data),
        // 重置密码
        resetPassword: (data) => api.post('/auth/reset-password', data)
    },
    
    // 用户相关
    user: {
        // 获取用户信息
        getProfile: () => api.get('/user/profile'),
        // 更新用户信息
        updateProfile: (data) => api.put('/user/profile', data),
        // 修改密码
        changePassword: (data) => api.put('/user/password', data),
        // 上传头像
        uploadAvatar: (file) => {
            const formData = new FormData();
            formData.append('avatar', file);
            return api.post('/user/avatar', formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            });
        }
    },
    
    // 宠物相关
    pets: {
        // 获取用户的所有宠物
        getAll: () => api.get('/pets/list'),
        // 获取单个宠物详情
        getById: (id) => api.get(`/pets/${id}`),
        // 添加宠物
        add: (data) => api.post('/pets/add', data),
        // 更新宠物信息
        update: (id, data) => api.put(`/pets/${id}`, data),
        // 删除宠物
        delete: (id) => api.delete(`/pets/${id}`),
        // 上传宠物照片
        uploadPhoto: (petId, file) => {
            const formData = new FormData();
            formData.append('photo', file);
            return api.post(`/pets/${petId}/photos`, formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            });
        }
    },
    
    // 服务相关
    services: {
        // 获取所有服务类型
        getAll: () => api.get('/serviceType/list'),
        // 获取单个服务详情
        getById: (id) => api.get(`/services/${id}`),
        // 获取服务分类
        getCategories: () => api.get('/services/categories'),
        // 根据分类获取服务
        getByCategory: (category) => api.get(`/services/category/${category}`),
        // 搜索服务
        search: (keyword) => api.get('/services/search', { params: { q: keyword } })
    },
    
    // 订单相关
    orders: {
        // 获取用户的所有订单
        getAll: (params) => api.get('/orders/list', { params }),
        // 获取单个订单详情
        getById: (id) => api.get(`/orders/${id}`),
        // 创建订单
        create: (data) => api.post('/orders/create', data),
        // 更新订单状态
        updateStatus: (id, status) => api.put(`/orders/${id}/status`, { status }),
        // 取消订单
        cancel: (id) => api.put(`/orders/${id}/cancel`),
        // 支付订单
        pay: (id, paymentData) => api.post(`/orders/${id}/pay`, paymentData),
        // 评价订单
        review: (id, reviewData) => api.post(`/orders/${id}/review`, reviewData),
        // 获取订单列表
        getShopAll: () => api.get('/shop/orders'),
        // 获取单个订单详情
        getShopById: (id) => api.get(`/shop/order/${id}`),
        // 创建订单
        createShop: (addressId, remark) => api.post('/shop/order/create', null, { params: { addressId, remark } }),
        // 获取订单明细
        getShopItems: (orderId) => api.get(`/shop/order/items/${orderId}`)
    },
    
    // 支付相关
    payment: {
        // 创建支付订单
        create: (data) => api.post('/payment/create', data),
        // 查询支付状态
        query: (paymentId) => api.get(`/payment/query/${paymentId}`),
        // 退款
        refund: (paymentId, data) => api.post(`/payment/refund/${paymentId}`, data)
    },
    // 代购相关
    shop: {
        // 商品相关
        products: {
            // 获取商品列表
            getAll: () => api.get('/shop/products/list'),
            // 获取单个商品详情
            getById: (id) => api.get(`/shop/product/${id}`),
            // 添加商品
            add: (data) => api.post('/shop/product/add', data),
            // 更新商品
            update: (id, data) => api.put(`/shop/product/${id}`, data),
            // 删除商品
            delete: (id) => api.delete(`/shop/product/${id}`)
        },
        
        // 购物车相关
        cart: {
            // 获取购物车列表
            getAll: () => api.get('/shop/cart'),
            // 添加商品到购物车
            add: (productId, quantity) => api.post('/shop/cart/add', null, { params: { productId, quantity } }),
            // 更新购物车商品数量
            update: (cartId, quantity) => api.post('/shop/cart/update', null, { params: { cartId, quantity } }),
            // 删除购物车商品
            delete: (cartId) => api.post('/shop/cart/delete', null, { params: { cartId } }),
            // 清空购物车
            clear: () => api.post('/shop/cart/clear')
        }
        
    },
    
    // 文件上传
    upload: {
        // 通用文件上传
        file: (file, type = 'general') => {
            const formData = new FormData();
            formData.append('file', file);
            formData.append('type', type);
            return api.post('/upload/file', formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            });
        },
        // 图片上传
        image: (file) => {
            const formData = new FormData();
            formData.append('image', file);
            return api.post('/upload/image', formData, {
                headers: {
                    'Content-Type': 'multipart/form-data'
                }
            });
        }
    },
    
    // 地址相关
    address: {
        // 获取用户所有地址
        getAll: () => api.get('/address/list'),
        // 添加地址
        add: (data) => api.post('/address/add', data),
        // 删除地址
        delete: (id) => api.delete(`/address/delete/${id}`),
        // 更新地址
        update: (id, data) => api.put(`/address/update/${id}`, data)
    }
};

// 将API暴露到全局作用域
window.petHouseAPI = petHouseAPI;
window.api = api;

// 输出调试信息
console.log('宠物家政服务平台API模块已加载');
console.log('API基础URL:', api.defaults.baseURL);
console.log('可用API:', Object.keys(petHouseAPI)); 